# -*- coding: utf-8 -*-


from flask import Flask, request, jsonify

from WRASimulationService import wRASimulationService

from Inflow import CalculationUnit as inflowCalculationUnit
from WDF import CalculationUnit as wdfCalculationUnit
import json

app = Flask(__name__)

# 供水计算
@app.route('/api/water-lack', methods=['POST'])
def api():
    river = request.get_json()

    data = wRASimulationService()
    data.execute(river,12,0,river.priority_supply,river.priority_demand)

    return jsonify(""), 500  # 返回 JSON 格式的错误响应和 500 状态码

# 来水预测
@app.route('/api/water-come', methods=['POST'])
def waterComeApi():
    try:
        region_data = request.get_json()  # 获取请求中的 JSON 数据
        if region_data is not None:
            # 在这里处理接收到的 JSON 数据
            # 进行业务逻辑处理，并生成响应
            regions = {}
            for uid, data in region_data.items():
                regions[uid] = inflowCalculationUnit(uid=uid, **data)
                # 传入数据为多年降雨量时，多进行一步求水平年降雨量
                if regions[uid].rainfall:
                    regions[uid].calculate_frequency_rainfall()
                    regions[uid].calculate_mon_runoff_pre()
                    regions[uid].calculate_year_runoff_pre()
                # 传入参数为水平年降雨量时，直接求月径流量和年径流量
                elif regions[uid].Rainfall95:
                    regions[uid].calculate_mon_runoff_pre()
                    regions[uid].calculate_year_runoff_pre()

            # 生成响应结果
            # fixme 修改
            result = {}
            for uid, region in regions.items():
                result[uid] = {
                    'year95': region.year95,
                    'year75': region.year75,
                    'year50': region.year50,
                    'MonRunoffPre95': region.MonRunoffPre95,
                    'MonRunoffPre75': region.MonRunoffPre75,
                    'MonRunoffPre50': region.MonRunoffPre50,
                    'YearRunoffPre95': region.YearRunoffPre95,
                    'YearRunoffPre75': region.YearRunoffPre75,
                    'YearRunoffPre50': region.YearRunoffPre50
                }

            response = {
                'code': 200,
                'data': result
            }

            # fixme 修改
            return json.dumps(response), 200  # 返回 JSON 格式的错误响应和 400 状态码
        else:
            # 请求中没有 JSON 数据
            response = {
                'code': 500,
                'msg': 'No data received'
            }
            return jsonify(response), 400  # 返回 JSON 格式的错误响应和 400 状态码
    except Exception as e:
        # 处理异常情况
        response = {
            'code': 500,
            'message': str(e)
        }
        return jsonify(response), 500  # 返回 JSON 格式的错误响应和 500 状态码

#需水预测
@app.route('/api/water-demand', methods=['POST'])
def waterDemandApi():
    try:
        region_data = request.get_json()  # 获取请求中的 JSON 数据
        if region_data is not None:
            # 在这里处理接收到的 JSON 数据
            regions = {}
            for uid, data in region_data.items():
                regions[uid] = wdfCalculationUnit(uid=uid, **data)
                # 传入数据为多年降雨量时，多进行一步求水平年降雨量
                regions[uid].len_col()  # 获得月还是旬的长度值
                regions[uid].predict_future_values()  # 生活
                regions[uid].industry_calculate()  # 工业
                regions[uid].predict_farm_values()  # 农田
                regions[uid].predict_forest_values()  # 林牧
                regions[uid].predict_animals_values()  # 牲畜
                regions[uid].predict_river_values()  # 河道外生态

            result = {}
            for uid, region in regions.items():
                result[uid] = {
                    'life': region.predicted_values_dict,
                    'indurstry': region.indurstry_results_dict,
                    'farm': region.farm_dict,
                    'forest': region.forest_dict,
                    'animals': region.animals_dict,
                    'river': region.river_dict,
                }
            response = {
                'code': 200,
                'data': result
            }

            return json.dumps(response), 200  # 返回 JSON 格式的错误响应和 400 状态码
        else:
            # 请求中没有 JSON 数据
            response = {
                'code': 500,
                'msg': 'No data received'
            }
            return jsonify(response), 400  # 返回 JSON 格式的错误响应和 400 状态码
    except Exception as e:
        # 处理异常情况
        response = {
            'code': 500,
            'message': str(e)
        }
        return jsonify(response), 500  # 返回 JSON 格式的错误响应和 500 状态码

if __name__ == '__main__':
    app.run(debug=True, port=5000)


